/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Ventas.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import pe.edu.pucp.Envios.Controlador.EnviosControlador;
import pe.edu.pucp.Envios.DAO.EnviosDAO;
import pe.edu.pucp.Envios.Vista.GenerarEnviosGUI;
import pe.edu.pucp.Modelo.Cliente;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.TipoDocumento;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Util.ValHelper;
import pe.edu.pucp.Ventas.DAO.ClientesDAO;
import pe.edu.pucp.Ventas.Vista.BuscarClienteGUI;
import pe.edu.pucp.Ventas.Vista.ClienteGUI;

/**
 *
 * @author katy
 */
public class BuscarClientesControlador {
    private ClientesDAO m;
    private BuscarClienteGUI view;
    private ArrayList<TipoDocumento> lstTipoDocs;
    private ArrayList<Cliente> lstClientes;
    private Usuario user ;
    
    public BuscarClientesControlador(ClientesDAO dao, BuscarClienteGUI v, Usuario usr){
        this.user = usr;
        this.m = dao;
        this.view = v;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));      
        this.llenarTipoDocs();
        this.inicializarTablaResultados();
        this.view.addEditarButtonListener(new EditarButtonListerner());
        this.view.addBuscarButtonListener(new ListarClientesListener());
        this.view.addNuevoClienteButtonListerner(new MostrarNuevoClienteListener());
        this.view.addLimpiarButtonListener(new LimpiarBusquedaListener());
        this.view.addNuevoEnvioListerner(new RegistrarEnvioListener());
        this.view.addSoloTextoListener(new SoloTextoListener());
        this.view.addSoloNumerosListener(new SoloNumerosListener());
    }
    
    private void llenarTipoDocs(){
        lstTipoDocs = m.listarTipoDocs();
        this.view.llenaTipoDocs(lstTipoDocs);
    }
    
    private void inicializarTablaResultados() {
        lstClientes = m.listarClientes(view.getNombresRazonSocial(),
                                           lstTipoDocs.get(view.getTipoDocumento()),
                                           view.getNumeroDocumento(), false);
        view.llenaGrilla(lstClientes);
    }
    
    class MostrarNuevoClienteListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ClienteGUI v = new ClienteGUI(view.getPadre(), true);
            ClientesControlador c = new ClientesControlador(m, v, user);
            v.setVisible(true);
            inicializarTablaResultados();
        }
    }
    
    class LimpiarBusquedaListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            //TODO: katy,  Limpiar txt ?
           inicializarTablaResultados();
           
        }
    
    }
    
    class RegistrarEnvioListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {           
            int i = view.getSelectedClient();
            Cliente cliente;
            if (i >=0 ) {
                cliente = lstClientes.get(i);
                EnviosDAO dao = new EnviosDAO();
                GenerarEnviosGUI v = new GenerarEnviosGUI(view.getPadre(),true);
                EnviosControlador c = new EnviosControlador(dao,v,user,cliente);
                v.setVisible(true);
            } else {
                ValHelper.mostrarError("Debe seleccionar un cliente.");   
            }
        }
    
    }
    
    class ListarClientesListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            
            lstClientes = m.listarClientes(view.getNombresRazonSocial(),
                                           lstTipoDocs.get(view.getTipoDocumento()),
                                           view.getNumeroDocumento(), true);
            view.llenaGrilla(lstClientes);
        }
    }
    
    class EditarButtonListerner implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int i = view.getSelectedClient();
            Cliente cliente;
            if (i >=0 ) {
                cliente = lstClientes.get(i);
                ClienteGUI v = new ClienteGUI(view.getPadre(), true);
                ClientesControlador c = new ClientesControlador(m, v, user, cliente);
                v.setVisible(true);
                inicializarTablaResultados();
            } else 
                ValHelper.mostrarError("Debe seleccionar un cliente.");   

        }
    }
    
    class SoloTextoListener implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
           ValHelper.soloTexto(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            ValHelper.soloTexto(e);
        }

        @Override
        public void keyReleased(KeyEvent e) {
            ValHelper.soloTexto(e);
        }
      
    }
    
    class SoloNumerosListener implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
            ValHelper.soloDigito(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            ValHelper.soloDigito(e);
        }

        @Override
        public void keyReleased(KeyEvent e) {
            ValHelper.soloDigito(e);
      
        }
    
    }
}
